import axios from 'axios'
import { API_URL, UPLOAD_TIMEOUT } from '../config/api'

const apiClient = axios.create({
  baseURL: API_URL,
  timeout: UPLOAD_TIMEOUT,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 添加 token 到请求头（如果有）
apiClient.interceptors.request.use(config => {
  const token = localStorage.getItem('auth_token')
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
})

/**
 * 触发导入文件功能
 * @param {Object} options - 导入选项
 * @param {string} options.date - 日期 (可选，YYYYMMDD 格式)
 * @param {boolean} options.analyze_images - 是否分析图片 (默认 true)
 * @returns {Promise} - 导入结果
 */
export function importFiles(options = {}) {
  return apiClient.post('/import-files', {
    date: options.date,
    analyze_images: options.analyze_images !== undefined ? options.analyze_images : true
  })
}

/**
 * 获取最近导入的表情图片
 * @param {number} limit - 返回结果数量限制 (默认20)
 * @returns {Promise} - 最近导入的图片列表
 */
export function getRecentImports(limit = 20) {
  return apiClient.get('/uploads/recent-imports', {
    params: { limit }
  })
}

/**
 * 获取所有上传记录
 * @returns {Promise} - 上传记录列表
 */
export function getUploads() {
  return apiClient.get('/uploads')
}

/**
 * 获取所有上传日期
 * @returns {Promise} - 上传日期列表
 */
export function getUploadDates() {
  return apiClient.get('/upload-dates')
}

/**
 * 按日期获取上传记录
 * @param {string} date - 日期 (YYYYMMDD 格式)
 * @returns {Promise} - 指定日期的上传记录
 */
export function getUploadsByDate(date) {
  return apiClient.get(`/uploads/by-date/${date}`)
}

/**
 * 分析现有图片
 * @param {string} fileId - 文件ID
 * @returns {Promise} - 分析结果
 */
export function analyzeImage(fileId) {
  return apiClient.post(`/uploads/${fileId}/analyze`)
}

/**
 * 同步所有上传文件的标签到标签表
 * 重新计算每个标签的使用频率统计数据
 * @returns {Promise} - 同步结果
 */
export function syncTags() {
  return apiClient.post('/tags/sync')
}

/**
 * 更新指定上传文件的标签
 * @param {string} fileId - 文件ID
 * @param {Array} tags - 标签数组
 * @param {boolean} shouldSyncTags - 是否在更新后同步标签数据 (默认: false)
 * @returns {Promise} - 更新后的上传对象
 */
export function updateTags(fileId, tags, shouldSyncTags = false) {
  const updatePromise = apiClient.put(`/uploads/${fileId}/tags`, { tags })
  
  if (shouldSyncTags) {
    // 更新成功后同步标签
    return updatePromise.then(response => {
      // 异步调用标签同步，但不等待其完成
      syncTags().catch(error => console.error('标签同步失败:', error))
      return response // 返回原始更新响应
    })
  }
  
  return updatePromise
} 